package com.byxy.managerial.dao.impl;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;

import com.byxy.managerial.dao.StaffDao;
import com.byxy.managerial.entity.Staff;

/**
 * 员工dao接口实现类
 * 
 * @author muxiangling
 *
 */

@SuppressWarnings("unchecked")
@Repository
public class StaffDaoImpl implements StaffDao {
	/**
	 * 获取工厂方法
	 */
	@Resource
	private SessionFactory sessionFactory;

	/**
	 * 增加员工的方法
	 */
	@Override
	public void save(Staff e) {
		sessionFactory.getCurrentSession().save(e);
	}

	/**
	 * 删除员工的方法
	 */
	@Override
	public void delete(Staff e) {
		sessionFactory.getCurrentSession().delete(e);
	}

	/**
	 * 修改员工的方法
	 */
	@Override
	public void update(Staff e) {
		sessionFactory.getCurrentSession().clear();
		sessionFactory.getCurrentSession().update(e);
	}

	/**
	 * 查询所有员工的方法
	 */
	@Override
	public List<Staff> find() {
		String sql = "from " + Staff.class.getSimpleName();
		return sessionFactory.getCurrentSession().createQuery(sql).list();
	}

	/**
	 * 分页查询员工的方法
	 */
	@Override
	public List<Staff> find(int pos, int row) {
		String sql = "from " + Staff.class.getSimpleName();
		return sessionFactory.getCurrentSession().createQuery(sql).setFirstResult(pos).setMaxResults(row).list();
	}

	/**
	 * 根据id查询员工的方法
	 */
	@Override
	public Staff getByID(Serializable id) {
		return (Staff) sessionFactory.getCurrentSession().get(Staff.class, id);
	}

	/**
	 * 统计员工数量的方法
	 */
	@Override
	public long countAll() {
		String sql = "select count(u) from " + Staff.class.getSimpleName() + " u";
		return (long) sessionFactory.getCurrentSession().createQuery(sql).uniqueResult();
	}

	/**
	 * 根据员工编号查询员工的方法
	 */
	@Override
	public Staff getByName(String sid) {// sid:唯一编号但不是主键
		String hql = "from " + Staff.class.getSimpleName() + " where sid = ?";
		List<Staff> list = sessionFactory.getCurrentSession().createQuery(hql).setParameter(0, sid).list();
		Staff staff = null;
		if (list.size() != 0) {
			staff = list.get(0);
		}
		return staff;
	}
	
	/**
	 * 模糊查询员工信息
	 */
	@Override
	public List<Staff> findDim(String likeVal) {
		//原生sql语句
		String sql = "select m_staff.id,sid,sname,ssex,sage,joindate,sdid from m_staff INNER JOIN m_department on m_staff.sdid=m_department.id where concat(m_staff.id,sid,sname,ssex,sage,joindate,dname) like '%"+likeVal+"%'";
		// 执行原生sql语句方法,将绑定给addEntity(Staff.class)
		Query query = sessionFactory.getCurrentSession().createSQLQuery(sql).addEntity(Staff.class);
		return query.list();
	}

}
